/**
 * 该控制器类处理与评论相关的请求和操作。
 */
package com.jsp.lostfound.controller;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.jsp.lostfound.entity.Comment;
import com.jsp.lostfound.entity.Goods;
import com.jsp.lostfound.service.CommentService;
import com.jsp.lostfound.service.GoodsService;
import net.sf.json.JSONObject;

@Controller
public class CommentController {

	@Autowired
	private CommentService commentService; // 注入评论服务bean，用于处理评论相关操作
	@Autowired
	private GoodsService goodsService; // 注入商品服务bean，用于处理商品相关操作

	/**
	 * 处理发布评论的请求，将评论信息添加到数据库中。
	 * @param comment 评论信息
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/publishComment")
	public void publishComment(Comment comment, PrintWriter out) {
		// 获取当前距1970年的相隔秒
		Date tasktime = new Date(System.currentTimeMillis());
		// 设置日期输出的格式
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		comment.setPublishTime(df.format(tasktime)); // 设置评论发布时间
		commentService.addComment(comment);
		out.write("发布成功");
	}

	/**
	 * 处理获取评论数量的请求，返回指定商品ID的评论数量。
	 * @param goodsId 商品ID
	 * @return 返回指定商品ID的评论数量
	 */
	@RequestMapping("/getCommentsNums")
	@ResponseBody
	public String getCommentsNums(Integer goodsId) {
		return String.valueOf(commentService.showCommentNums(goodsId));
	}

	/**
	 * 处理加载评论数据的请求，返回指定商品ID的评论数据。
	 * @param pageNum 页数
	 * @param pageSize 每页数量
	 * @param goodsId 商品ID
	 * @return 返回指定商品ID的评论数据
	 */
	@RequestMapping("/loadCommentsData")
	@ResponseBody
	public List<Comment> loadCommentsData(@RequestParam(required = true) int pageNum,
										  @RequestParam(required = true) int pageSize, Integer goodsId) {
		return commentService.showCommentInfo(pageNum, pageSize, goodsId);
	}

	/**
	 * 处理搜索评论数量的请求，返回符合搜索条件的评论数量。
	 * @param conditions 搜索条件
	 * @return 返回符合搜索条件的评论数量
	 */
	@RequestMapping("/searchCommentsNums")
	@ResponseBody
	public String getSearchNums(Comment conditions) {
		return String.valueOf(commentService.searchCommentNums(conditions));
	}

	/**
	 * 处理搜索评论数据的请求，返回符合搜索条件的评论数据。
	 * @param pageNum 页数
	 * @param pageSize 每页数量
	 * @param conditions 搜索条件
	 * @return 返回符合搜索条件的评论数据
	 */
	@RequestMapping("/searchCommentsData")
	@ResponseBody
	public List<Comment> loadSearchData(@RequestParam(required = true) int pageNum,
										@RequestParam(required = true) int pageSize, String conditions) {
		JSONObject json = JSONObject.fromObject(conditions);
		Comment comment = (Comment) JSONObject.toBean(json, Comment.class);
		List<Comment> list = commentService.searchCommentInfo(pageNum, pageSize, comment);
		return list;
	}

	/**
	 * 处理查看评论详情的请求，返回指定评论ID和商品ID的评论详情。
	 * @param commentId 评论ID
	 * @param goodsId 商品ID
	 * @return 返回指定评论ID和商品ID的评论详情
	 */
	@RequestMapping("/showCommentDetail")
	public ModelAndView showCommentDetail(Integer commentId, Integer goodsId) {
		ModelAndView modelAndView = new ModelAndView("admin/commentDetail"); // 指定返回的视图名称
		Comment comment = commentService.showCommentDetail(commentId);
		Goods goods = goodsService.showGoodsDetail(goodsId);
		modelAndView.addObject("comment", comment); // 将评论详情和商品详情添加到视图中
		modelAndView.addObject("goods", goods);
		return modelAndView;
	}

	/**
	 * 处理删除评论的请求，从数据库中删除指定ID的评论。
	 * @param id 评论ID
	 * @param out 用于向客户端发送响应信息的PrintWriter对象
	 */
	@RequestMapping("/removeComment")
	public void removeComment(Integer id, PrintWriter out) {
		commentService.removeComment(id);
		out.write("成功删除一条评论");
	}

}